"use strict";
/**
 * 数据类型
 */
Object.defineProperty(exports, "__esModule", { value: true });
// 1.字符串 string
let name = 'tom';
let sex = "male";
let msg = `姓名：${name},性别：${sex}`;
// console.log(msg);
// 2.数值 number
let age = 20;
let height = 180.5;
//3.布尔 boolean
let flag = true;
//4.数组 Array
// 方式一：在数据类型的后面加[]，下面表示是一个字符串数组
let names = ['tom', 'jack', 'alice'];
names[0] = "汤姆";
// names[0] = 18; //数组中元素类型必须相同
// 方式二：使用数组泛型，Array<数据类型>
let nums = [12, 4, 1, 54];
// 5.null和undefined
// let address:undefined = undefined;
// let address:null = null;  //无意义，一般不会这样做
// 默认情况下 null和undefind是所有类型的子类型，可以将null和undefined赋值给其他类型
let address = null; //注意：需要在配置文件中关闭严格数据类型检查
let num = undefined;
// 6.元组，实际上就是特殊的数组
// names[names.length] = "make";
// console.log(names);
// 定义元组的方式，只能有三个类型，分别是字符串，数值，布尔值，经过编译后就是普通数组
let tuple = ["xiaoming", 20, false]; //元组的类型和数量都是固定的，但是各元素的类型可以不同
// tuple[0] = '李一鸣';
// tuple[0] = 18;  //不可以改变非元组规定外的类型，继续添加元素也是不被允许的
// console.log(tuple);
// 7.枚举 enum 用来限制可取值的范围，名称更友好，且有提示
var Season;
(function (Season) {
    Season["spring"] = "\u6625";
    Season["summer"] = "\u590F";
    Season["autumn"] = "\u79CB";
    Season["winter"] = "\u51AC";
})(Season || (Season = {}));
//使用时直接使用enum定义好的  枚举名.枚举键  经过编译后是个自执行函数
let s = Season.spring;
// 8.任意类型 any 当暂时不确定变量类型时可以使用
let a;
a = "hello";
a = 12;
a = false;
let b = ["hello", 12, false]; //数组中元素为任意类型
b[0] = 1;
// 9.空类型 void 常用于函数（表示没有返回值），表示为null或undefined
// let c:void = null;  //一般不声明变量，无意义
// 通常当函数没有返回值时，我们声明返回值类型为void
function show() {
    console.log(111);
}
// 10.永不存在的类型 never 是任何类型的子类型，没有类型是never的子类型，any也不可以赋值never
function test() {
    while (true) {
    }
}
// 11.object 非原始类型，也就是除number string boolean symbol null undefined之外的类型
let d;
d = [18, 24, 43];
d = {
    name: "xiaoming",
    age: 18,
    sex: "男"
};
d = new Array();
// 也就是说可以赋值为数组、对象、new xxx类型
// 12.联合类型：可以指定多个类型，只要值在规定类型中就可以赋值
let stu;
stu = 18;
stu = [18, 24, "hello"];
stu = "你好世界";
// 13.类型断言：为类型下定一个断言，使编译通过，只在编译环境起作用
// 两种写法：1. <类型>值   2.值 as 类型
let strs;
strs = "XiaoMing";
// console.log(strs.length);   //此时我们无法使用length属性，因为我们知道他是string，但编译器不知道
// 写法一：
console.log(strs.length);
// 写法二：
console.log(strs.length);
